-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[basicprofiles] Fix StateFilterProfile to use linked Item system unit #18144
Conversation
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
Signed-off-by: Andrew Fiddian-Green <[email protected]>
@jimtng good news that all your PRs have all now been merged; which means that this one is also now ready to go: => could you please have a look at it? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice refactorings!
One thing I'm wondering about is how would it handle the scenario when linked to an item with unit, but the condition is OtherItem1 > OtherItem2
(i.e. nothing to do with the linked item)?
.../src/main/java/org/openhab/transform/basicprofiles/internal/profiles/StateFilterProfile.java
Outdated
Show resolved
Hide resolved
@@ -603,7 +635,7 @@ public int getWindowSize() { | |||
// the previous state is kept in the acceptedState variable | |||
return 0; | |||
} | |||
return windowSize.orElse(DEFAULT_WINDOW_SIZE); | |||
return windowSize.isPresent() ? windowSize.get() : DEFAULT_WINDOW_SIZE; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the difference?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It eliminates the yellow squiggly underline compiler warning in Eclipse IDE :)
.../src/main/java/org/openhab/transform/basicprofiles/internal/profiles/StateFilterProfile.java
Show resolved
Hide resolved
.../src/main/java/org/openhab/transform/basicprofiles/internal/profiles/StateFilterProfile.java
Show resolved
Hide resolved
Good question. If I recall correctly I think the code converts 'OtherItem' to the string representation of its State, and then the string is handled in the same way as one hard coded in the condition LHS / RHS. So if 'OtherItem' was a QuantityType we would attempt to convert it to the systemUnit. And in the case 'OtherItem1 < OtherItem2' .. if either or both would not convert to systemUnit we would have an error -- which I guess means that the input State is rejected?? PS in any case I will add some JUnit tests.. => EDIT: I see that there are actually already many such tests .. and they all still pass. |
This comment was marked as resolved.
This comment was marked as resolved.
Signed-off-by: Andrew Fiddian-Green <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
.../src/main/java/org/openhab/transform/basicprofiles/internal/profiles/StateFilterProfile.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, LGTM
@andrewfg This change broke a comparison between a MQTT number channel with unit The logging was
I think it would be good to add a breaking change warning and advice the users to check unit compatibility, WDYT? |
@florian-h05 thanks for reporting this. I suppose there are two ways forward..
Probably 2. is the “correct” approach, but 1. is more lenient. Actually I thought that I had programmed it to do case 1. so I need to check. @jimtng any thoughts? |
I thought that it required the unit from before this PR. Prior to this PR, the unit of the linked item didn't matter. It only looked at the incoming value from the binding, which in this case would've been a QuantityType, and it would not allow comparison against a non QuantityType. Since this PR isn't a patch, you could test it on 4.3.2 (old behaviour prior to this PR) |
@jimtng thanks for the feedback. I think there are two topics..
|
Correct, but I'm only 99% sure (don't remember exactly). We need feedback from @florian-h05 to see if he could test this on 4.3. I can also test tomorrow (it's very late here right now, I'm ready to hit the hay)
What do you mean?
I don't think it's a good idea either. If my memory serves, this case was specifically not allowed since my first PR to this Line 388 in e4ce954
That was in August 2024. |
I was thinking to make it clearer that the data type of the second comparand must match that of the first comparand in the chapter below. https://www.openhab.org/addons/transformations/basicprofiles/#state-filter-conditions |
I just had a look at the current doc (https://next.openhab.org) and I agree it isn't clear / emphasised that quantitytype data must be compared against a quantitytype constant / data, and comparison against plain number / non quantity will cause it to fail. |
Resolves #18122
There is a bug whereby the calculations over a StateFilterProfile set of time series state values are based on the Unit of the first member in the set of values. There are two problems: a) the order of the state values is not relevant, and b) the Unit of the incoming state values is not definitive to the Unit of the expected result. Therefore these calculations do produce variable and unexpected results.
This PR fixes the bug by normalising the calculations so that they are all based on the Unit of the target Item to which the StateFilterProfile is linked.
Furthermore this PR allows conversion between non- inverted and inverted Units so invertible conversions (e.g. Kelvin <=> Mirek) are supported.
And finally it also provides better support for cases where the binding may provide state updates in different mixed formats e.g. a mixture of QuantityType with different base units, UndefType, and various States that can yield a DecimalType value.
Signed-off-by: Andrew Fiddian-Green [email protected]